Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

РНР+MySQL+буква "я" (Zakhar40)
Author Message
Zakhar40
Участник форума



Joined: 07 Jan 2006
Posts: 22
Карма: 0
   поощрить/наказать

Location: Донецк, Украина

PostPosted: Sun Jan 08, 2006 1:32 am (написано за 5 минут 1 секунду)
   Post subject: РНР+MySQL+буква "я"
Reply with quote

выполняю запрос: ALTER TABLE `group3` ADD `я` TEXT NOT NULL ;

оно мне пишет: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'я` TEXT NOT NULL' at line 1

Поиском все обшарил причину ошибки нашел в кодеровке win 1251, "я" (только маленькая, с большой все в порядке) совпадает с 0xFF - оно используеться для технических средств, но не нашел способа как через РНР сделать, чтоб этот запрос работал???

У меня стоит последний пакет денвера...

в PHPMyAdmin все работает

Я пробывал переделывать в UTF, но у меня не получилось :(

Помогите, пожалуйста...
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Sun Jan 08, 2006 5:03 pm (спустя 15 часов 31 минуту; написано за 14 секунд)
   Post subject:
Reply with quote

Zakhar40
Я думаю, не надо русские буквы использовать ни в именах таблиц, ни в именах полей :)
Back to top
View user's profile Send private message Send e-mail
Zakhar40
Участник форума



Joined: 07 Jan 2006
Posts: 22
Карма: 0
   поощрить/наказать

Location: Донецк, Украина

PostPosted: Mon Jan 09, 2006 5:41 pm (спустя 1 день 38 минут; написано за 23 секунды)
   Post subject:
Reply with quote

Почему???
Мне надо... :(
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Mon Jan 09, 2006 6:12 pm (спустя 30 минут; написано за 15 секунд)
   Post subject:
Reply with quote

Zakhar40 wrote:
Мне надо... :(
Поподробнее, пожалуйста
Back to top
View user's profile Send private message Send e-mail
Zakhar40
Участник форума



Joined: 07 Jan 2006
Posts: 22
Карма: 0
   поощрить/наказать

Location: Донецк, Украина

PostPosted: Mon Jan 09, 2006 6:31 pm (спустя 18 минут; написано за 3 минуты 5 секунд)
   Post subject:
Reply with quote

ну просто название поля - это название категории, и вот допустим и делаю поиск.

н-р поле:
Яблоки: красные, синие, зеленные.
Пряники: большие, маленькие...

Так вот кол-во полей и их тип я заранее знать не могу. Так вот я определил названия полей и выдал их в поиск.... А так мне надо, я даже не знаю, что брать и переводить все поля, это лишняя таблица....
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Mon Jan 09, 2006 7:36 pm (спустя 1 час 5 минут; написано за 1 минуту 6 секунд)
   Post subject:
Reply with quote

Zakhar40
Может просто немного по-другому организовать базу :)? Например в виде двух таблиц, в одной из них - название категории и id категории, а во второй - подумайте сами.
Back to top
View user's profile Send private message Send e-mail
Zakhar40
Участник форума



Joined: 07 Jan 2006
Posts: 22
Карма: 0
   поощрить/наказать

Location: Донецк, Украина

PostPosted: Mon Jan 09, 2006 7:44 pm (спустя 7 минут; написано за 2 минуты 46 секунд)
   Post subject:
Reply with quote

Не это конечно можно, я ж не против. Просто уже сделано так, и мой вариант меня больше устрaивает.
Просто обидно что phpMyAdmin, делает такое поле без проблем.
Может это из-за того что он в другой кодировке????
Можно перекодировать только запрос для мюскла, допустим в UTF?
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Mon Jan 09, 2006 8:54 pm (спустя 1 час 10 минут; написано за 31 секунду)
   Post subject:
Reply with quote

Zakhar40
Ну в конце концов можете заменять скажем букву «я» на букву «z» в запросе, и везде, где это нужно... Если не хотите слушать моего совета. Хотя зачем Вы тогда собственно спрашиваете?
Back to top
View user's profile Send private message Send e-mail
Zakhar40
Участник форума



Joined: 07 Jan 2006
Posts: 22
Карма: 0
   поощрить/наказать

Location: Донецк, Украина

PostPosted: Mon Jan 09, 2006 10:41 pm (спустя 1 час 47 минут; написано за 1 минуту 25 секунд)
   Post subject:
Reply with quote

Не, Ваш совет полезен. Просто мне много переделывать придеться, да и так удобней.
Просто есть выход, так как PHPMyAdmin это делает
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Mon Jan 09, 2006 11:13 pm (спустя 32 минуты; написано за 22 секунды)
   Post subject:
Reply with quote

Zakhar40 wrote:
так как PHPMyAdmin это делает
Ну выясняйте просто подробнее, что и как именно он отправляет. Исходники ведь открыты, отследить это в общем-то не очень сложно
Back to top
View user's profile Send private message Send e-mail
Zakhar40
Участник форума



Joined: 07 Jan 2006
Posts: 22
Карма: 0
   поощрить/наказать

Location: Донецк, Украина

PostPosted: Tue Jan 10, 2006 7:45 pm (спустя 20 часов 31 минуту; написано за 49 секунд)
   Post subject:
Reply with quote

А в какой кодировке он посылает запрос??? Вообще можно весь код в одной кодировке, а запросс в другой???
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Tue Jan 10, 2006 8:16 pm (спустя 31 минуту)
   Post subject:
Reply with quote

Юpий Насрeтдинов wrote:
Исходники ведь открыты, отследить это в общем-то не очень сложно
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Jan 19, 2006 11:48 pm (спустя 9 дней 3 часа 31 минуту)
   Post subject:
Reply with quote


М

Окончательный ответ: не надо делать метаданные с символами, отличными от ASCII. Проектируйте базу по-другому.

Перенесено из форума: Разное :: PHP.
Перенесено в форум: Общие вопросы :: SQL.
Back to top
View user's profile Send private message Send e-mail
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Fri Jan 20, 2006 5:47 am (спустя 5 часов 59 минут; написано за 2 минуты 28 секунд)
   Post subject:
Reply with quote

Хм...
Как раз сегодня с этой буквой «я» столкнулся.

В общем, помогла замена «бэктиков» на одинарные кавычки.

Такого уродливого кода мне давно не попадалось:
Code (php): скопировать код в буфер обмена
// Build SQL
$sSql = "SELECT obyekty.oname AS ` `, SUM(factfin.isum) AS ' ', MAX(obyekty.genpodryad) AS '', MAX(obyekty.primech) AS ``, MAX(obyekty.zakazchik) AS ``, MAX(obyekty.nachalo) AS ` `, MAX(obyekty.konec) AS ` `, MAX(obyekty.investor) AS ``, MAX(obyekty.smetanach) AS '  ', SUM(factfin.psum) AS `   ` FROM factfin INNER JOIN obyekty ON (factfin.obyekty_oid = obyekty.oid)";
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Fri Jan 20, 2006 10:27 am (спустя 4 часа 39 минут; написано за 57 секунд)
   Post subject:
Reply with quote

bæv wrote:
AS 'Источники финансирования'
Вот это? Тут обычные кавычки?
А я и не знал, что так можно писать...

На самом деле, вопрос весьма важный - в DbSimple иногда происходит автоквотинг, и делается он через бэктики как раз.
Back to top
View user's profile Send private message Send e-mail
Zakhar40
Участник форума



Joined: 07 Jan 2006
Posts: 22
Карма: 0
   поощрить/наказать

Location: Донецк, Украина

PostPosted: Fri Jan 20, 2006 9:20 pm (спустя 10 часов 53 минуты; написано за 1 минуту 27 секунд)
   Post subject:
Reply with quote

а буквы "я", разве в ASCII нет???
Мне не помогли кавычки, какие бы я не стваил все одно и тоже :(
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Fri Jan 20, 2006 10:56 pm (спустя 1 час 36 минут; написано за 9 секунд)
   Post subject:
Reply with quote

В ASCII - только символы 0...127.
Back to top
View user's profile Send private message Send e-mail
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Fri Jan 20, 2006 11:36 pm (спустя 39 минут; написано за 4 минуты 54 секунды)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Вот это? Тут обычные кавычки?
Да.

Подозреваю, что это просто «повезло» с версией MySQL — в мануале я ничего похожего не нашёл.
(Денвер от 26.01.2005)

Zakhar40 wrote:
какие бы я не стваил все одно и тоже
А текст ошибки не меняется?
Zakhar40 wrote:
буквы "я", разве в ASCII нет???
В мануале сказано:
dev.mysql.com/doc/refman/4.1/en/legal-names.html wrote:
In addition to the restrictions noted in the table, no identifier can contain ASCII 0 or a byte with a value of 255.
255==0xFF
Back to top
View user's profile Send private message
Zakhar40
Участник форума



Joined: 07 Jan 2006
Posts: 22
Карма: 0
   поощрить/наказать

Location: Донецк, Украина

PostPosted: Sat Jan 21, 2006 7:02 pm (спустя 19 часов 26 минут; написано за 2 минуты 10 секунд)
   Post subject:
Reply with quote

с ASCII понял, спасибо!

Денвер у меня тот же (2005-01-26)

Текс ошибки тот же...
Back to top
View user's profile Send private message Send e-mail
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Sat Jan 21, 2006 9:10 pm (спустя 2 часа 7 минут; написано за 3 минуты 6 секунд)
   Post subject:
Reply with quote

Zakhar40 wrote:
ALTER TABLE `group3` ADD `я` TEXT NOT NULL ;
Так, а Вы запрос через командную строку пытаетесь выполнить? Или как?
Back to top
View user's profile Send private message
Zakhar40
Участник форума



Joined: 07 Jan 2006
Posts: 22
Карма: 0
   поощрить/наказать

Location: Донецк, Украина

PostPosted: Sun Jan 22, 2006 10:18 pm (спустя 1 день 1 час 7 минут; написано за 55 секунд)
   Post subject:
Reply with quote

Запросом с РНР, та я грешу на кодировку в которой передается запрос с РНР на MySQL, еще не разобрался в конфиге
Back to top
View user's profile Send private message Send e-mail
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Mon Jan 23, 2006 3:42 am (спустя 5 часов 24 минуты; написано за 2 минуты 29 секунд)
   Post subject:
Reply with quote

У меня в базе win-кодировка, и в начале скрипта локаль устанавливается через setlocale().

P.S.
Code (php): скопировать код в буфер обмена
define (www.php.net/define)("DEFAULT_LOCALE", "Russian_Russia.1251");
@setlocale (www.php.net/setlocale)(LC_ALL, DEFAULT_LOCALE);
(я предупреждал, что код уродский — это то, что PHPMaker генерит)
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Jan 24, 2006 11:13 pm (спустя 1 день 19 часов 30 минут; написано за 33 секунды)
   Post subject:
Reply with quote

bæv wrote:
Russian_Russia.1251
Это название виндовой локали в самих виндах. В Юниксе она обычно по-другому называется.
Back to top
View user's profile Send private message Send e-mail
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Wed Jan 25, 2006 5:14 am (спустя 6 часов 1 минуту; написано за 27 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров, ты это к чему написал?
Back to top
View user's profile Send private message
Zakhar40
Участник форума



Joined: 07 Jan 2006
Posts: 22
Карма: 0
   поощрить/наказать

Location: Донецк, Украина

PostPosted: Tue Apr 25, 2006 9:23 pm (спустя 3 месяца 16 часов 8 минут; написано за 4 минуты 30 секунд)
   Post subject:
Reply with quote

У меня вот вопрос. Почему не хорошо использовать русские буквы в названиях полей? Тыкните меня носом пожалуйста. Все говорят будут потом проблемы, или просто низзя. Ну я не пойму почему?

Мне это надо для следующего:

Есть таблицы в которых народ может менять кол-во полей и их название, как хочется.
Потом эта таблицы отображаются. Так вот если все названия полей хранить в отдельной таблице, а потом из нее все это вытаскивать. Это замедлит работу. Если делать на каждую таблицу еще одну таблицу с названиями полей, тоже время + место. Что Вы мне посоветуете делать?

И в конце концов, почему нельзя русские названия???
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Apr 25, 2006 11:27 pm (спустя 2 часа 3 минуты; написано за 1 минуту 25 секунд)
   Post subject:
Reply with quote

С чего Вы взяли, что замедлит? Тестировали?
Надо просто JOIN-ы грамотно применить, и индексы.

2 таблицы: в одной - названия полей, в другой - значения с привязкой к ID названия. А то и просто: имя=значение. Совершенно нормальная схема.
Back to top
View user's profile Send private message Send e-mail
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Wed Apr 26, 2006 10:44 am (спустя 11 часов 17 минут; написано за 4 минуты 58 секунд)
   Post subject:
Reply with quote

Zakhar40 wrote:
Почему не хорошо использовать русские буквы в названиях полей?
bv[j? примерно потому же, почему и русские буквы не используются в именах переменных в PHP (хотя допустимы). Так не принято, это не интернационально, Вы не можете быть уверены, xbnj не получите неожиданных труднообъяснимых глюков.
Если я правильно понимаю мануал, Вы можете использовать неанглийские буквы в MySQL в качестве идентификаторов - но
  1. только из того же набора символов, который указан для базы
  2. только с версии 4.0
  3. Максимальная длина идентификатора сокращается
Back to top
View user's profile Send private message
Zakhar40
Участник форума



Joined: 07 Jan 2006
Posts: 22
Карма: 0
   поощрить/наказать

Location: Донецк, Украина

PostPosted: Wed Apr 26, 2006 10:07 pm (спустя 11 часов 22 минуты; написано за 41 секунду)
   Post subject:
Reply with quote

буду тестировать, а где можно исчерпывающе почитать про join корме как мануале и гугле? :)
Back to top
View user's profile Send private message Send e-mail
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Thu Apr 27, 2006 12:37 pm (спустя 14 часов 29 минут; написано за 15 секунд)
   Post subject:
Reply with quote

Zakhar40
не знаю. Сам бы с удовольствием почитал
Back to top
View user's profile Send private message
Zakhar40
Участник форума



Joined: 07 Jan 2006
Posts: 22
Карма: 0
   поощрить/наказать

Location: Донецк, Украина

PostPosted: Fri Apr 28, 2006 9:16 am (спустя 20 часов 39 минут; написано за 7 минут 31 секунду)
   Post subject:
Reply with quote

если я раньше делал так:
1) определял какие поля мне нужно выводить;
2) делал потом просто запрос на выборку этих полей. SELECT `name_field_1`, `name_field_2`...;
3) выводил так $row['name_field_1']...;

теперь мне надо:
1) определить какие поля мне нужно выводить (это можно делать и по названию и по номеру(лучше по номеру));
2)
Code (SQL): скопировать код в буфер обмена
SELECT table_data.id, table_data.info, table_data.1, table_data.2, table_names.name, table_names.id_field
        FROM `table_data`, `table_names`
        WHERE table_data.id=1
                OR table_data.id=2
                OR table_data.id=3
                AND table_names.id_group='1'
                AND table_names.id_field='1'
                OR table_names.id_field='2'
Я не могу правильно составить запрос он мне выдает кучу строк. Т.е добавляет table_names.id_field с названием - это логично. Но вот как его так вывернуть чтоб он мне выдал примерно вот так:
id_data - name_data - 1_data - 2_data - field_1_name - field_2_name.


И тоде тут нюанс, field_1_name - field_2_name данные в этих полях просто копируется - не трата ли это лишней памяти? не будет ли он постоянно делать выборку еще и в таблице table_names?
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sat Apr 29, 2006 10:28 am (спустя 1 день 1 час 11 минут; написано за 2 минуты 32 секунды)
   Post subject:
Reply with quote

Почитайте про LEFT JOIN в документации MySQL. Нужно делть по одному дополнительному JOIN-у на каждую пару имя=значение.

Но, вообще-тоЮ, если очень хочется, можете вернуться к схеме, когда все значения хранятся по столбцам. Просто давайте этим столбцам английские названия. А чтобы из русских получить английские, заведите дополнительную таблицу соответствий.

Вот только как вы будете новый столбец в таблицу добавлять, если она у вас разрастется, а не представляю. Это очень дорогая операция.
Back to top
View user's profile Send private message Send e-mail
Zakhar40
Участник форума



Joined: 07 Jan 2006
Posts: 22
Карма: 0
   поощрить/наказать

Location: Донецк, Украина

PostPosted: Sat Apr 29, 2006 11:43 pm (спустя 13 часов 15 минут; написано за 4 минуты 22 секунды)
   Post subject:
Reply with quote

Документацию я читал, ни чего не понимаю с этим LEFT JOIN, вот там можно паралельно использовать WHERE и JOIN что писать после ON. Блин когда пойму как он пашет, точно мануал напишу про него :)))).

что-то я так понимаю, что самый оптимальный и "дешевый" спопосб это русские названия полей. Я не могу проследить как phpMyAdmin все добавляет и у него все работает. Где именно запрос запускается я нашел, там ни чего особенного... Можно как нибудь кодировку запроса поменять?
Back to top
View user's profile Send private message Send e-mail
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Tue May 02, 2006 9:59 am (спустя 2 дня 10 часов 16 минут; написано за 2 минуты 54 секунды)
   Post subject:
Reply with quote

Zakhar40 wrote:
что писать после ON
Условие связи таблиц:
Code (SQL): скопировать код в буфер обмена
a JOIN b ON (a.a_id = b.a_id) WHERE [i]дополнительные ограничения[/i]
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML